home *** CD-ROM | disk | FTP | other *** search
/ Plug-In Power Pack for Netscape Communicator / Plug-In Power Pack for Netscape Communicator.iso / plugins / dataviews / dvdraw / examples / datasource / dstemplate.cpp < prev    next >
C/C++ Source or Header  |  1997-05-19  |  5KB  |  173 lines

  1. /////////////////////////////////////////////////////////////////////////////
  2. //
  3. // DsTemplate.cpp : Starting point for a custom data source DLL
  4. //                    for use with DV-Draw 9.8
  5. //
  6. /////////////////////////////////////////////////////////////////////////////
  7.  
  8. #include "stdafx.h"
  9. #include <afxdllx.h>
  10. #include <afx.h>
  11. #include "DvDsDll.h"
  12.  
  13. #ifdef _DEBUG
  14. #define new DEBUG_NEW
  15. #undef THIS_FILE
  16. static char THIS_FILE[] = __FILE__;
  17. #endif
  18.  
  19. static AFX_EXTENSION_MODULE MyDsDLL = { NULL, NULL };
  20.  
  21.  
  22. /////////////////////////////////////////////////////////////////////////////
  23. //
  24. //  CMyDsDll class
  25. //
  26. class CMyDsDll : public CDvDsDll
  27. {
  28. public :
  29.     void Release() { delete this; }
  30.     void GetIdInfo(CString& mfgName, CString& objName, CString& versionStr);
  31.     int  HandleRequest(DV_DSDLLDATA* pData, CWnd* pParent);
  32. };
  33.  
  34.  
  35.  
  36. /////////////////////////////////////////////////////////////////////////////
  37. //
  38. CMyDsDll::CMyDsDll()
  39. {}
  40.  
  41. CMyDsDll::~CMyDsDll()
  42. {}
  43.  
  44.  
  45. /////////////////////////////////////////////////////////////////////////////
  46. //
  47. void CMyDsDll::GetIdInfo(CString& mfgName, CString& objName, CString& versionStr)
  48. {
  49.     mfgName    = "My Corporation";
  50.     objName    = "My Data Browser";
  51.     versionStr = "1.0.0.1";
  52. }
  53.  
  54.  
  55. /////////////////////////////////////////////////////////////////////////////
  56. //
  57. int CMyDsDll::HandleRequest(DV_DSDLLDATA* pData, CWnd* pParent)
  58. {
  59.     pData->m_Dirty = FALSE;
  60.  
  61.     if(pData->m_Context & DV_DSDLL_QUERYDLL)
  62.     {
  63.         // Initial query request of what it is we support..
  64.         pData->m_Context = (DV_DSDLLCONTEXT)STD_SUPPORT;
  65.         return IDOK;
  66.     }
  67.     else if(pData->m_Context & DV_DSDLL_INITNEWVIEW)
  68.     {
  69.     // When DV-Draw first starts up, or when the user creates a 'New' view,
  70.     // DV-Draw gives the data DLL an opportunity to do anything it wants to
  71.     // the view.  In the DataViews' standard browser, this code would create
  72.     // the 'default'dat' data source and a 'Var:1' data source variable.
  73.     }
  74.     else if(pData->m_Context & DV_DSDLL_RECONNECTDATA)
  75.     {
  76.         if(!pData->m_Sview)
  77.             // If no secondary view, then as you might expect, we just need to
  78.             // reconnect the vdp's to some place in the view.  This really is only
  79.       // necessary if you are using dsvars, otherwise, if you are just storing
  80.       // information about your data connection in the vdp's name, then that
  81.       // has already been correctly cloned and you just need to perform any
  82.       // tasks specific to your data model.
  83.         else
  84.         {
  85.             // If there is a secondary view, we are pasting objects to another view
  86.       // altogether (this is the functional equivalent of 'Save subview'). 
  87.       // In DataViews' standard data browser, what is done is to clone the data
  88.       // sources into the secondary (target) view.  You as the DLL writer will
  89.       // have to decide based on your specific needs what needs to be done.
  90.         }
  91.     }
  92.     else if(pData->m_Context & DV_DSDLL_DEFAULTDATA)
  93.     {
  94.         // Default data connection request.  This called when graph or input
  95.     // objects are created (they are not created and then make a data
  96.     // connection later...its all done in oe shot).  The only thing we need
  97.     // really pay attention to is the fact that input objects, even when drawn
  98.     // in the edit area, must have their vdp's attached to some persistent
  99.     // memory to write to or DV-Draw will crash!
  100.         if(pData->m_Context & DV_DSDLL_EDITINPUT)
  101.             // If necessary, attach the vdp to to some area of persistent memory
  102.         else
  103.             // Otherwise, tis a graph, so do whatever you need to do..
  104.         return IDOK;
  105.     }
  106.     else if(pData->m_Context & DV_DSDLL_EDITDSL     || 
  107.               pData->m_Context & DV_DSDLL_SELECTDATA  ||
  108.                 pData->m_Context & DV_DSDLL_EXCHANGEDATA )
  109.     {
  110.     // Instantiate your dialog here abd call its DoModal() method:
  111.     //
  112.     //        CMyDataDialog myDialog(...);
  113.     //
  114.     //        if(myDialog.DoModal() == IDOK ) {
  115.     //            ...
  116.     //        }
  117.     //
  118.     // If dialog returns IDOK, then preform any necessary actions
  119.     // as required, for example, to you need to validate the type
  120.     // then of variable selected.  Are you using data source variables?
  121.     // If so, and the context is DV_DSDLL_SELECTDATA or DV_DSDLL_EXCHANGEDATA
  122.     // make sure the pData->m_DsVar data member is set:
  123.     //
  124.     //        pData->m_DsVar = myDialog.GetDsVar();
  125.  
  126.         return IDOK;
  127.     }
  128.  
  129.     return IDCANCEL;
  130. }
  131.  
  132.  
  133. extern "C" {
  134.  
  135.  
  136. /////////////////////////////////////////////////////////////////////////////
  137. //
  138. DLLEXPORT BOOL
  139. GetInterface(int idd, void **pInterf)
  140. {
  141.     *pInterf = 0;
  142.     if (idd == IID_Datasource) 
  143.         *pInterf = new CMyDsDll;
  144.     return (pInterf) ? TRUE : FALSE;
  145. }
  146.  
  147.  
  148. /////////////////////////////////////////////////////////////////////////////
  149. //
  150.  
  151. int APIENTRY
  152. DllMain(HINSTANCE hInstance, DWORD dwReason, LPVOID lpReserved)
  153. {
  154.     if (dwReason == DLL_PROCESS_ATTACH)
  155.     {
  156.         TRACE0("DSDLLTEMPLATE.DLL Initializing!\n");
  157.         
  158.         // Extension DLL one-time initialization
  159.         AfxInitExtensionModule(MyDsDLL, hInstance);
  160.  
  161.         // Insert this DLL into the resource chain
  162.         new CDynLinkLibrary(MyDsDLL);
  163.     }
  164.     else if (dwReason == DLL_PROCESS_DETACH)
  165.     {
  166.         TRACE0("DSDLLTEMPLATE.DLL Terminating!\n");
  167.     }
  168.     return 1;   // ok
  169. }
  170.  
  171.  
  172. }
  173.